﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SPMS.Log.ObjectFormatter
{
    /// <summary>
    /// 日志级别对象格式化器
    /// </summary>
    /// <remarks>用于格式化对象基本对象</remarks>
    /// <history>
    /// [zanezeng]               2009/10/21 9:15    创建
    /// </history>
    internal sealed class LevelObjectFormatter : AbstractObjectFormatter
    {
        #region ---Protected Method

        /// <summary>
        /// 将指定的对象格式化为字符串
        /// </summary>
        /// <param name="provider">对象格式化器提供者</param>
        /// <param name="obj">要格式化的对象</param>
        /// <param name="format">对象的格式化字符串</param>
        /// <param name="formatProvider">格式化提供者，提供用于检索控制格式化的对象的机制</param>
        /// <returns>给定对象的字符串描述信息</returns>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2010/1/13 13:19    创建
        /// </history>
        /// <remarks></remarks>
        /// <history>
        /// [zanezeng]               2010/1/13 15:22    创建
        /// </history>
        protected override string FormatObject( IObjectFormatterProvider provider, object obj, string format, IFormatProvider formatProvider )
        {
            //判断消息对象是否为空引用
            if (null == obj)
            {
                //调用默认对象格式化器进行格式化
                return provider.FormatObject( obj, format, formatProvider );
            }

            //转化为日志级别对象
            Level levelObj = obj as Level;

            //判断是否为日志级别对象
            if (null == levelObj)
            {
                //调用默认对象格式化器进行格式化
                return provider.FormatObject( obj, format, formatProvider );
            }

            //判断是否指定了格式化字符串
            if (string.IsNullOrEmpty( format ))
            {
                //如果没有指定格式化字符串，则直接返级别的显示名称
                return levelObj.DisplayName;
            }
            else
            {
                //如果指定了格式化字符串，则格式化日志级别的值
                return provider.FormatObject( levelObj.Value, format, formatProvider );
            }
        }

        #endregion
    }
}
